﻿using System.Collections.Generic;
using MJD.Comunes.DtoEntidades;
using MJD.Comunes.Entidades;
using MJD.Logica.Traductores;
using MJD.Transaccional.Comandos.Fabricas;
using MJD.Transaccional.Comandos.Interfaces;

namespace MJD.Logica.Controladores
{
    /// <summary> Clase que hace de controlador para las entidades maestras </summary>
    /// <remarks>clase que llama a los comandos que son requeridos para las acciones</remarks>
    public class ControladorTablaMaestras
    {
        /// <summary> Metodo que obtiene los datos de todos los estados </summary>
        /// <returns>lista de estados</returns>
        public List<DtoEstado> ConsultarTodosEstados()
        {
            IComando<IList<Estado>> comando = FabricaComandosEstado.ObtenerComandoObtenerTodos();
            IList<Estado> lista = comando.Ejecutar();
            return TraductorEstado.TraducirListaEntidad(lista);
        }


        /// <summary> Metodo que consulta todas las ciudades de un estado especifico </summary>
        /// <param name="estado">datos del estado a consultar las ciudades</param>
        public List<DtoCiudad> ConsultarCiudadPorEstado(DtoEstado estado)
        {
            IComando<IList<Ciudad>> comando =
                FabricaComandosCiudad.ObtenerComandoObtenerPorEstado(TraductorEstado.TraducirDto(estado));
            return TraductorCiudad.TraducirListaEntidad(comando.Ejecutar());
        }


        /// <summary> Metodo que obtiene la lista de ramos existentes en la base de datos </summary>
        /// <returns>Lista de ramos </returns>
        public List<DtoRamo> ObtenerRamos()
        {
            IComando<IList<Ramo>> comando = FabricaComandosRamo.ObtenerComandoObtenerRamos();
            List<DtoRamo> retorno = TraductorRamo.TraducirListaEntidad(comando.Ejecutar());
            return retorno;
        }


        /// <summary> Metodo que obtiene la lista de causas dado un ramo existentes en la base de datos </summary>
        /// <returns>Lista de causas </returns>
        public List<DtoCausa> ObtenerCausas(DtoRamo ramo)
        {
            Ramo entidad = TraductorRamo.TraducirDto(ramo);
            IComando<IList<Causa>> comando = FabricaComandosCausa.ObtenerComandoObtenerCausas(entidad);
            List<DtoCausa> retorno = TraductorCausa.TraducirListaEntidad(comando.Ejecutar());
            return retorno;
        }
    }
}
